import $ from 'jquery';
import jwt_decode from 'jwt-decode';

const ModuleUser = {
    state:{
        username: "",
        id:"",
        photo: "",
        followerCount: 0,
        access:"",
        refresh: "",
        is_login:false
    },
    getters:
        {
            //  这里可以通过计算获取参数
            // 比如通过拼接得到
            // 参数可以传state

        },
    mutations:
        {
            // 对state的直接修改放到mutations里边
            //mutations里边不能执行异步操作
            // mutations里边可以进行对state参数的修改操作

            updateUser(state,user) {
                state.id = user.id;
                state.username = user.username;
                state.photo = user.photo;
                state.followerCount = user.followerCount;
                state.access = user.access;
                state.refresh = user.refresh;
                state.is_login = user.is_login;

            },

            updateAccess(state,access){
                state.access = access;
            }

        },
    actions:
        {
            //定义对state的各种操作
            // actions里面不能对state进行修改
            // 这里传的参数是context
            // 完整、复杂的修改  放在actions里边

            login(context,data){
                $.ajax({
                    url: "https://localhost:8080/user/getSession",
                    type: "POST",
                    data:{
                        username:data.username,
                        password:data.password,
                    },
                    success(resp) {

                        const {access,refresh} = resp;

                        const access_obj = jwt_decode(access);  //对access解码
                        setInterval(() => {
                            $.ajax({
                                url:"https://app165.acapp.acwing.com.cn/api/token/refresh/",
                                type : "POST",
                                data:{
                                    refresh,
                                },
                                success(resp){
                                    context.commit('updataAccess',resp.access);
                                }
                            });
                        },4.5*60 * 1000)  //4.5分钟刷新一次
                        $.ajax({
                            url:"https://app165.acapp.acwing.com.cn/myspace/getinfo/", //一个链接，获取用户的信息
                            type: "GET",
                            data: {
                                user_id : access_obj.user_id,

                            },
                            headers: {  //授权，如果api没授权不要加
                                'Authorization' : "Bearer " + access,
                            },
                            success(resp){

                                context.commit("updateUser",{
                                    ...resp,  //将resp结构,把数组或类对象展开成一系列用逗号隔开的值
                                    access: access,
                                    refresh: refresh,
                                    is_login : true,
                                });
                                data.success();  //回调函数
                            },
                        })

                    },
                    error(){
                        data.error();
                    }

                })
            }


        },
    modules:
        {
            // 用来维护state中的对象
            // user:{}
        }
}

export {ModuleUser}